#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")

import gnomeapplet, gtk, sys, threading, urllib, urllib2, time

class TuzsaApplet(gnomeapplet.Applet):
	
	applet = None
	image_file = "../desktop/icono.png"
	poste = str(165)
	txtPoste = gtk.Entry()
	txtLinea = gtk.Entry()

	def __init__(self, applet, iid):
		self.applet = applet
		size = self.applet.get_size() - 2
		pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(self.image_file, size, size)
		image = gtk.Image()
		image.set_from_pixbuf(pixbuf)
		hbox = gtk.HBox()
		self.label = gtk.Label("   ")
		hbox.add(image)
		hbox.add(self.label)
		self.applet.add(hbox)
		#aquí se comprueba si ya se ha guardado el poste etc, esto pa cuando funcione
		self.poste = str(165)
		#conectamos los eventos
		self.applet.connect("button-press-event",self.button_press)
		#mostramos el applet
		self.applet.show_all()

	#eventos
	def button_press(self, image, event):
		if event.button==1:
			self.mostrar_ventana()

	def boton_aceptar(self, button, event, window):
		window.destroy()
		self.comprobador(self.txtPoste.get_text())
		#igual sería mejor comprobar el número antes de cerrar la ventana, y no cerrarla hasta que se introduzca bien

	def comprobador(self, texto):
		try:
			if (int(texto)>0) and (int(texto)<10000):
				#self.label.set_text("    Poste "+texto)
				self.poste = texto
				print "vamos a ver ese poste "+texto
				parada = PosteTuzsa(texto, self.label)
				print "iniciando hilo"
				parada.start()
				parada.join()
			else:
				#aquí iría el diálogo diciendo que el poste no va a estar ni de coña
				#self.glade.get_widget("dlgPoste").show()
				self.label.set_text("    Poste no válido")
		except:
			self.label.set_text("    Error")
			print sys.exc_info()[0]

	#ventana para poner el número de poste
	def mostrar_ventana(self):
		ventana = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
		vb = gtk.VBox()
		hb1 = gtk.HBox()
		hb2 = gtk.HBox()
		#etiqueta
		lblPoste = gtk.Label("Número de poste: ")
		lblLinea = gtk.Label("Línea de bus: ")
		#entrada de texto
		self.txtPoste.set_alignment(1.0)
		self.txtPoste.set_sensitive(True)
		#otros
		hb1.add(lblPoste)
		hb1.add(self.txtPoste)
		hb2.add(lblLinea)
		hb2.add(self.txtLinea)
		bt_cerrar = gtk.Button("Aceptar")
		vb.add(hb1)
		vb.add(hb2)
		vb.add(bt_cerrar)
		ventana.add(vb)
		ventana.set_position(gtk.WIN_POS_CENTER)
		bt_cerrar.connect("button-press-event", self.boton_aceptar, ventana)
		ventana.show_all()

class PosteTuzsa(threading.Thread):
	def __init__ (self, poste, label):
		threading.Thread.__init__(self)
		self.poste = poste
		self.label = label

	def run(self):
		#while True:
		self.lee_poste()
		#time.sleep(10)

	def lee_poste(self):
		print "soy el hilo"
		frecuencias = []
		correcto = True
		try:
			params = urllib.urlencode({"poste": self.poste})
			f = urllib2.urlopen("http://80.32.15.59/tuzsa_frm_esquemaparadatime.php"+"?"+params)
			aux = 0
			while True:
				linea = f.readline()
				linea = linea.decode("iso-8859-1")
				aux+=1
				if not linea: break
				#esta es la línea con los datos de la parada
				if aux==11:
					if linea.find("POSTE SIN INFORMACION")!=-1: 
						self.label.set_text("Poste sin información")
						correcto = False
					elif linea.find("Parada erronea o en un desvio")!=-1:
						self.label.set_text("Parada errónea o en desvío")
						correcto = False
					else:
						#elimino el primer trozo de código
						linea = linea.partition('<td class="titDigital">')
						linea = linea[2]
						#elimino el final
						linea = linea.partition('</table>')
						linea = linea[0]
						#sustituimos </td><td class="titDigital"> por espacio en blanco
						linea = linea.replace('</td><td class="titDigital">','_')
						#sustituimos </td></tr><tr><td class="digital"> por :, esto separa las diferentes frecuencias con todos los datos
						linea = linea.replace('</td></tr><tr><td class="digital">',":")
						#sustituimos </td><td class="digital"> por espacio en blanco
						linea = linea.replace('</td><td class="digital">','_')
						#sustituimos </td></tr> por nada
						linea = linea.replace('</td></tr>','')
						#dividimos línea en las subcadenas separadas por : para meterlas en la variable frecuencias
						frecuencias = linea.split(':')
			f.close()
	
		except IOError, e:
			print "Ocurrió un error"
			print e.reason

		if correcto:		
			auxFr = 0
			for frecuencia in frecuencias:
				aux = frecuencia.split('_')
				if auxFr!=0:
					self.label.set_text(aux[0]+": "+aux[2])
					time.sleep(1)
				auxFr+=1

				
#Factory para el applet
def factory(applet, iid):
	TuzsaApplet(applet,iid)
	return gtk.TRUE

#Ejecutar en ventana
if len(sys.argv) == 2:
	if sys.argv[1] == "-w":
		mainWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)
		mainWindow.set_title("¿A qué hora llega mi bus?")
		mainWindow.connect("destroy", gtk.main_quit)
		applet = gnomeapplet.Applet()
		factory(applet,None)
		applet.reparent(mainWindow)
		mainWindow.show_all()
		gtk.main()
        gtk.gdk.threads_leave()
        sys.exit()

if __name__ == '__main__':
        print "Starting factory"
        gnomeapplet.bonobo_factory("OAFIID:Gnome_Panel_Tuzsa_Factory", gnomeapplet.Applet.__gtype__, "Horarios de TUZSA", "0.1", factory)
